function Teacher(option) {
  this.name = option.name;
  this.age = option.age;
  this.smoke = function () {
    this.age += 1;
    console.log(`${this.name}今年${this.age}岁`);
  };
  this.run = function () {
    this.age -= 1;
    console.log(`${this.name}今年${this.age}岁`);
  };
}

var teacherZhang = new Teacher({ name: "张三", age: 12 });
var teacherMa = new Teacher({ name: "马东", age: 26 });
teacherZhang.smoke();
teacherZhang.smoke();
teacherZhang.smoke();
teacherMa.smoke();
teacherMa.smoke();
teacherMa.smoke();


// 1.this永远指向的是对象，构造函数只是一个函数，没有形成对象，也就不存在this
// 2.只有当构造函数通过new实例化后，形成了对象，this则执行形成后的对象
// 3.如上所见，通过同一个构造函数实例化出多个对象，每个对象时独立的，一个进行改变时，并不会影响到其他的实例化对象
// 4.有第三条可得：我们可以通过构造函数去构造多个有相同属性的对象，且他们后续的发展互不影响，这样可极大的实现代码复用，也就是最基础的模块化
// 5.我们在设计参数时，要用对象的方式传参，原因：非对象传参对参数的传入顺序要求严格，对构造函数的扩展性和实用性不利